2.6 P2P

与 CS 结构相反,P2P 结构对打开的基础设施服务器依赖要小很多或甚至不需要这些依赖,而是由成对的用户终端(被称作 对等体)直接通信。对等节点由于直接是用户的客户端,因此并不需要总是在线,每次上线时的 IP 也可以变化。

P2P 的一个最大优势便是在于其 自拓展性。我们通过一个例子大致感受一下:

假设一个由一个服务器与 N 个用户终端组成的网络。服务器的上行链路传输速率为 u,第 i 个用户终端的上下行链路速率分别为 uidi,现在每一个用户终端都同时需要从服务器处获取一个大小为 L 的文件。在理想情况下:

如果这是一个 CS 结构的网络,则总的传输用时:

综上,有总用时

tCSmin(NLu,Ldmin)

如果这是一个 P2P 结构的网络,则总的传输用时:

综上,有总用时

tP2Pmin(Lu,Ldmin,NLu+i=1Nui)

N 足够大,而每个用户的下载速率与上传速率 uidi 近似相等时,可以发现 CS 结构网络中最短用时将呈线性增长。而在 P2P 结构下,每个新增节点的加入在带来更多需求的同时也带来了更多服务能力,最短用时的增长趋势要慢于 CS 模式。

Pasted image 20250324151710.png

P2P 的网络结构

P2P 的网络结构可以细分为 非结构化 P2P结构化 P2P 两种。前者根据其对中心基础服务器的依赖程度又可分为 集中式、分散式、半分散式。下面我们各举一例进行讲解:

集中式:Napster

分散式:Gnutella

本部分所介绍的内容已经过时,基本不再被现代工业界所使用。

混合式:KaZaA

结构化 P2P:分布式散列表(DHT)

P2P 系统实例:BitTorrent

称参与一个特定文件分发的所有对等方的集合被称为一个 洪流(Torrent)。文件以 256KB 一块(Chunk) 的大小传输。每个洪流存在一个基础设施节点——追踪器(tracker),负责维护洪流中的对等方的信息。每个对等体需要与追踪器建立连接,注册一些信息后并从追踪器得到该洪流中的节点列表,才算加入某个洪流。

某个对等体加入一个洪流并请求一个文件时,一般而言它上来没有该文件的任何一块。它于是与该洪流中的其它节点发送请求。随着时间流逝,该节点会获得一些文件块,此时它也可以根据自身现有的文件块接受其他人的请求。

请求块的机制:最稀缺优先(Rarest First)。对等体周期性向邻居询问拥有块的信息(获取位图),并请求目前最稀有(副本数量最少)的块,以期大致均衡每个块在洪流中的数量。

发送块的机制:一报还一报(Tit-for-tat)。根据最近一个周期(一般为 30 秒)内为自己提供了最大传输速率的几位邻居,主动先向他们建立连接传输对方所需要的块。每过一个周期,随机再选择一个其它节点并向对方提供服务,以期找到更好的传输伙伴。

其它机制:例如流水线、随机优先选择、残局模型与反怠慢,详情见 Wikipedia